/**
 * API服务主入口
 * 提供统一的API请求方法
 */
import request, { BASE_URL } from './config.js';
import userAPI from './user.js';
import goalAPI from './goal.js';

// 其他API模块可以在这里导入

// 请求方法封装
export const api = {
  // GET请求
  get(url, params = {}, options = {}) {
    return request(url, {
      method: 'GET',
      data: params,
      ...options
    });
  },
  
  // POST请求
  post(url, data = {}, options = {}) {
    return request(url, {
      method: 'POST',
      data,
      ...options
    });
  },
  
  // PUT请求
  put(url, data = {}, options = {}) {
    return request(url, {
      method: 'PUT',
      data,
      ...options
    });
  },
  
  // DELETE请求
  delete(url, data = {}, options = {}) {
    return request(url, {
      method: 'DELETE',
      data,
      ...options
    });
  },
  
  // 文件上传
  upload(url, file, name = 'file', data = {}, options = {}) {
    // 从本地存储获取token
    const token = uni.getStorageSync('token') || '';
    
    // 构建完整的请求URL
    const fullUrl = url.startsWith('http') ? url : BASE_URL + url;
    
    // 设置默认请求头
    const headers = {
      ...options.headers
    };
    
    // 如果有token，添加到请求头
    if (token) {
      headers['Authorization'] = `Bearer ${token}`;
    }
    
    return new Promise((resolve, reject) => {
      uni.uploadFile({
        url: fullUrl,
        filePath: file,
        name: name,
        formData: data,
        header: headers,
        success: (res) => {
          try {
            // 解析响应数据
            const responseData = JSON.parse(res.data);
            if (res.statusCode >= 200 && res.statusCode < 300) {
              resolve(responseData);
            } else {
              // 统一错误处理
              const error = {
                statusCode: res.statusCode,
                data: responseData
              };
              reject(error);
            }
          } catch (e) {
            reject({
              statusCode: res.statusCode,
              data: res.data
            });
          }
        },
        fail: (err) => {
          reject(err);
        }
      });
    });
  },
  
  // 文件下载
  download(url, options = {}) {
    // 从本地存储获取token
    const token = uni.getStorageSync('token') || '';
    
    // 构建完整的请求URL
    const fullUrl = url.startsWith('http') ? url : BASE_URL + url;
    
    // 设置默认请求头
    const headers = {
      ...options.headers
    };
    
    // 如果有token，添加到请求头
    if (token) {
      headers['Authorization'] = `Bearer ${token}`;
    }
    
    return new Promise((resolve, reject) => {
      uni.downloadFile({
        url: fullUrl,
        header: headers,
        success: (res) => {
          if (res.statusCode >= 200 && res.statusCode < 300) {
            resolve(res);
          } else {
            reject(res);
          }
        },
        fail: (err) => {
          reject(err);
        }
      });
    });
  }
};

// API模块集合
export const services = {
  user: userAPI,
  goal: goalAPI,
  // 可以在这里添加其他API模块
};

// 统一的API响应处理
export function handleApiResponse(response) {
  // 这里可以根据后端返回的统一格式进行处理
  // 例如：检查code字段，提取data字段等
  return response.data;
}

// 统一的API错误处理
export function handleApiError(error) {
  console.error('API请求错误:', error);
  // 这里可以根据项目需求进行统一的错误处理
  // 例如：显示错误提示、记录错误日志等
  return Promise.reject(error);
}

// 请求包装器，用于统一处理请求和响应
export function requestWrapper(requestFn, successMessage = '') {
  return async function(...args) {
    try {
      // 显示加载状态
      uni.showLoading({
        title: '加载中...',
        mask: true
      });
      
      // 执行请求
      const response = await requestFn(...args);
      
      // 隐藏加载状态
      uni.hideLoading();
      
      // 显示成功提示
      if (successMessage) {
        uni.showToast({
          title: successMessage,
          icon: 'success'
        });
      }
      
      // 返回处理后的响应数据
      return handleApiResponse(response);
    } catch (error) {
      // 隐藏加载状态
      uni.hideLoading();
      
      // 处理错误
      return handleApiError(error);
    }
  };
}

// 导出默认对象
export default {
  api,
  services,
  handleApiResponse,
  handleApiError,
  requestWrapper
};